home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.saf.impl;
-
- import com.extensibility.saf.AdjunctException;
- import com.extensibility.saf.Association;
- import com.extensibility.saf.MetaSchema;
- import com.extensibility.saf.SchemaAdjunct;
- import java.io.File;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- import java.util.Properties;
- import java.util.Vector;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import org.w3c.dom.Attr;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- import org.xml.sax.EntityResolver;
- import org.xml.sax.SAXException;
-
- public class GeneralSchemaAdjunct implements SchemaAdjunct, Tags {
- protected MetaSchema metaSchema;
- protected Document adjunctDocument;
- protected MultiHashtable nameMap;
- protected Association documentAssociation;
-
- public GeneralSchemaAdjunct(Document var1, MetaSchema var2) {
- this.init(var1, var2);
- }
-
- public GeneralSchemaAdjunct(String var1, MetaSchema var2) {
- try {
- DocumentBuilderFactory var3 = DocumentBuilderFactory.newInstance();
- var3.setValidating(false);
- DocumentBuilder var4 = var3.newDocumentBuilder();
- this.adjunctDocument = var4.newDocument();
- Element var5 = this.adjunctDocument.createElement("schema-adjunct");
- this.adjunctDocument.appendChild(var5);
- var5.setAttribute("target", var1);
- this.init(this.adjunctDocument, var2);
- } catch (ParserConfigurationException var6) {
- ((Throwable)var6).printStackTrace();
- System.exit(1);
- }
-
- }
-
- public GeneralSchemaAdjunct(File var1, EntityResolver var2, MetaSchema var3) throws SAXException, IOException {
- try {
- DocumentBuilderFactory var4 = DocumentBuilderFactory.newInstance();
- var4.setValidating(false);
- DocumentBuilder var5 = var4.newDocumentBuilder();
- if (var2 != null) {
- var5.setEntityResolver(var2);
- }
-
- Document var6 = var5.parse(var1);
- this.init(var6, var3);
- } catch (ParserConfigurationException var7) {
- ((Throwable)var7).printStackTrace();
- System.exit(1);
- }
-
- }
-
- private void init(Document var1, MetaSchema var2) {
- this.metaSchema = var2;
- this.adjunctDocument = var1;
- this.nameMap = new MultiHashtable();
- NodeList var3 = var1.getElementsByTagName("document");
- if (var3.getLength() > 0) {
- this.documentAssociation = new GeneralAssociation(this, (Element)var3.item(0));
- }
-
- this.hashAssociations("element");
- this.hashAssociations("attribute");
- }
-
- public String getTarget() {
- return this.adjunctDocument.getDocumentElement().getAttribute("target");
- }
-
- public MetaSchema getMetaSchema() {
- return this.metaSchema;
- }
-
- public Association[] getAssociations() {
- Vector var1 = new Vector();
- this.gatherAssociations(var1, "document");
- this.gatherAssociations(var1, "element");
- this.gatherAssociations(var1, "attribute");
- Association[] var2 = new Association[var1.size()];
-
- for(int var3 = 0; var3 < var1.size(); ++var3) {
- var2[var3] = (Association)var1.elementAt(var3);
- }
-
- return var2;
- }
-
- public Association[] getAssociations(String var1) {
- if (var1.equals("/")) {
- if (this.documentAssociation == null) {
- return new Association[0];
- } else {
- Association[] var11 = new Association[]{this.documentAssociation};
- return var11;
- }
- } else {
- SelectorXPath var2 = new SelectorXPath(var1);
- int var3 = var1.lastIndexOf("/") + 1;
- String var4 = var1.substring(var3);
- Association[] var5 = this.getPotentialAssociations(var4);
- Vector var6 = new Vector();
-
- for(int var7 = 0; var7 < var5.length; ++var7) {
- Association var8 = var5[var7];
- String var9 = var8.getSelector();
- SelectorXPath var10 = new SelectorXPath(var9);
- if (var10.matches(var2)) {
- var6.addElement(var8);
- }
- }
-
- Association[] var12 = new Association[var6.size()];
-
- for(int var13 = 0; var13 < var6.size(); ++var13) {
- var12[var13] = (Association)var6.elementAt(var13);
- }
-
- return var12;
- }
- }
-
- public Association[] getAssociations(Element var1) {
- return this.getAssociations(var1, (Attr)null);
- }
-
- public Association[] getAssociations(Element var1, Attr var2) {
- String var3;
- if (var2 == null) {
- var3 = var1.getNodeName();
- } else {
- var3 = String.valueOf("@").concat(String.valueOf(var2.getNodeName()));
- }
-
- Association[] var4 = this.getPotentialAssociations(var3);
- Vector var5 = new Vector();
-
- for(int var6 = 0; var6 < var4.length; ++var6) {
- Association var7 = var4[var6];
- String var8 = var7.getSelector();
- SelectorXPath var9 = new SelectorXPath(var8);
- if (var9.matches(var1, var2)) {
- var5.addElement(var7);
- }
- }
-
- Association[] var10 = new Association[var5.size()];
-
- for(int var11 = 0; var11 < var5.size(); ++var11) {
- var10[var11] = (Association)var5.elementAt(var11);
- }
-
- return var10;
- }
-
- public String getProperty(String var1, String var2) {
- return this.getProperty(this.getAssociations(var1), var2);
- }
-
- public String getProperty(Element var1, String var2) {
- return this.getProperty(this.getAssociations(var1), var2);
- }
-
- public String getProperty(Element var1, Attr var2, String var3) {
- return this.getProperty(this.getAssociations(var1, var2), var3);
- }
-
- protected void hashAssociations(String var1) {
- NodeList var2 = this.adjunctDocument.getElementsByTagName(var1);
-
- for(int var3 = 0; var3 < var2.getLength(); ++var3) {
- Node var4 = var2.item(var3);
- String var5 = ((Element)var4).getAttribute("which");
- var5 = var5.substring(var5.lastIndexOf("/") + 1);
- this.nameMap.put(var5, new GeneralAssociation(this, (Element)var4));
- }
-
- }
-
- protected String getProperty(Association[] var1, String var2) {
- String var3 = null;
-
- for(int var4 = 0; var4 < var1.length; ++var4) {
- String var5 = var1[var4].getProperty(var2);
- if (var3 == null) {
- var3 = var5;
- } else if (var5 != null) {
- throw new AdjunctException("ambiguous property specification");
- }
- }
-
- return var3;
- }
-
- protected void gatherAssociations(Vector var1, String var2) {
- NodeList var3 = this.adjunctDocument.getElementsByTagName(var2);
-
- for(int var4 = 0; var4 < var3.getLength(); ++var4) {
- var1.addElement(new GeneralAssociation(this, (Element)var3.item(var4)));
- }
-
- }
-
- protected Association[] getPotentialAssociations(String var1) {
- Vector var2 = (Vector)this.nameMap.get(var1);
- if (var2 == null) {
- return new Association[0];
- } else {
- Association[] var3 = new Association[var2.size()];
-
- for(int var4 = 0; var4 < var2.size(); ++var4) {
- var3[var4] = (Association)var2.elementAt(var4);
- }
-
- return var3;
- }
- }
-
- public Association[] getAssociationsBySelector(String var1) {
- if (var1.equals("/")) {
- Association[] var9 = new Association[]{this.documentAssociation};
- return var9;
- } else {
- int var2 = var1.lastIndexOf("/") + 1;
- String var3 = var1.substring(var2);
- Association[] var4 = this.getPotentialAssociations(var3);
- Vector var5 = new Vector();
-
- for(int var6 = 0; var6 < var4.length; ++var6) {
- Association var7 = var4[var6];
- if (var1.equals(var7.getSelector())) {
- var5.addElement(var7);
- }
- }
-
- Association[] var10 = new Association[var5.size()];
-
- for(int var8 = 0; var8 < var5.size(); ++var8) {
- var10[var8] = (Association)var5.elementAt(var8);
- }
-
- return var10;
- }
- }
-
- public String[] getSelectors() {
- Association[] var1 = this.getAssociations();
- Properties var2 = new Properties();
-
- for(int var3 = 0; var3 < var1.length; ++var3) {
- ((Hashtable)var2).put(var1[var3].getSelector(), "");
- }
-
- String[] var4 = new String[((Hashtable)var2).size()];
- Enumeration var5 = ((Hashtable)var2).keys();
-
- for(int var6 = 0; var6 < ((Hashtable)var2).size(); ++var6) {
- var4[var6] = (String)var5.nextElement();
- }
-
- return var4;
- }
-
- public Association createAssociation(int var1, String var2) {
- String var3 = var1 == 0 ? "document" : (var1 == 1 ? "element" : "attribute");
- Element var4 = this.adjunctDocument.createElement(var3);
- Element var5 = this.adjunctDocument.getDocumentElement();
- var5.appendChild(var4);
- GeneralAssociation var6 = new GeneralAssociation(this, var4);
- if (var1 != 0) {
- var4.setAttribute("which", var2);
- String var7 = var2.substring(var2.lastIndexOf("/") + 1);
- this.nameMap.put(var7, var6);
- }
-
- return var6;
- }
-
- public void removeAssociation(Association var1) {
- GeneralAssociation var2 = (GeneralAssociation)var1;
- Element var3 = var2.getMetaData();
- String var4 = var3.getAttribute("which");
- var4 = var4.substring(var4.lastIndexOf("/") + 1);
- Vector var5 = (Vector)this.nameMap.get(var4);
- if (var5 != null) {
- var5.removeElement(var2);
- }
-
- Node var6 = var3.getParentNode();
- if (var6 != null) {
- var6.removeChild(var3);
- }
-
- }
-
- public Document getDocument() {
- return this.adjunctDocument;
- }
- }
-